<?php

Yii::import('application.modules.ninio.models._base.BaseDatosAntropomorficos');

/**
 * Modelo heredado de BaseDatosAntropomorficos
 */
class DatosAntropomorficos extends BaseDatosAntropomorficos {

    public $observacion_Auditoria; //guarda la observacion para las pistas de auditoria
    public $archivo_Auditoria; //guarda el archivo para la pista de auditoria
    public $institucion;
    public $checkedDadosAlta;
    public $nombreCompletoInfante;
    public $action;

    const BAJO_PESO = "BAJOPESO";
    const RIESGO_BAJO_PESO = "RIESGOBAJOPESO";
    const PESO_NORMAL = "PESONORMAL";
    const RIESGO_SOBRE_PESO = "RIESGOSOBREPESO";
    const SOBRE_PESO = "SOBREPESO";
    const TALLA_BAJA_SEVERA = "BAJATALLASEVERA";
    const TALLA_BAJA = "TALLABAJA";
    const TALLA_NORMAL = "TALLANORMAL";
    const TALLA_ALTA = "TALLAALTA";
    const TALLA_MUY_ALTA = "TALLAMUYALTA";

//    public $nombreCompletoInfante;

    /**
     * Recupera el nombre del modelo
     * @return DatosAntropomorficos
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    /**
     * Pluraliza el nombre del modelo segun el id $n
     * @param int $n
     * @return string
     */
    public static function label($n = 1) {
        return Yii::t('app', 'Dato Antropom&eacute;trico|Datos Antropom&eacute;tricos', $n);
    }

    public function rules() {
        return array(
            array('edad', 'edadValida'),
            array('edad', 'mesValido'),
            array('ninios_id, fecha, edad, talla, peso, imc', 'required'),
            array('ninios_id', 'numerical', 'integerOnly' => true),
            array('edad', 'length', 'max' => 2),
            array('observacion_Auditoria, archivo_Auditoria', 'safe'), //todo
            array('talla, peso', 'length', 'max' => 5),
            array('talla, peso, imc', 'numerical'),
            array('imc', 'length', 'max' => 10),
            array('id, ninios_id, fecha, edad, talla, peso, imc, institucion, checkedDadosAlta, nombreCompletoInfante', 'safe', 'on' => 'search'),
        );
    }

    /**
     * Permite validar que la edad no se repita en otro registro antropométrico
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $ninio_id id del niño
     * @param int $edad edad del niño meses
     * @param int $id id del dato antropomorfico
     * @return boolean
     */
    public function validadorMes($ninio_id, $edad, $id) {
        $model = DatosAntropomorficos::model()->findAllByAttributes(array('ninios_id' => $ninio_id, 'edad' => $edad));
        if (empty($model)) {
            return true;
        } else {
            if (!empty($model) && $model[0]['id'] == $id) {
                return true;
            } else {
                return false;
            }
        }
    }

    /**
     * Valida la edad entre 0 y 60 meses
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param attribute $attribute
     * @param data $params
     */
    public function edadValida($attribute, $params) {
        if (!empty($this->attributes['edad']) && $attribute == "edad") {
            if ((int) ($this->attributes['edad']) < 0) {
                $this->addError($attribute, 'Edad en meses es inválida');
            } elseif ((int) ($this->attributes['edad']) > 60) {
                $this->addError($attribute, 'El software solo trabaja con edades de hasta 60 meses');
            }
        }
    }

    /**
     * Valida que no se pueda ingresar la misma edad en 2 registros diferentes
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param type $attribute
     * @param type $params
     */
    public function mesValido($attribute, $params) {
        if (!empty($this->attributes['edad']) && $attribute == "edad") {
            if ($this->validadorMes($this->attributes['ninios_id'], $this->attributes['edad'], $this->attributes['id']) == false) {
                $this->addError($attribute, 'Esta edad ya se encuentra en otro registro, no se permite guardar 2 veces la misma edad');
            }
        }
    }

    /**
     * Modifica los nombres de las columnas de la tabla y atributos del modelo
     * @return array
     */
    public function attributeLabels() {
        return array_merge(parent::relations(), array(
            'talla' => Yii::t('app', 'Talla (cm)'),
            'ninios_id' => Yii::t('app', 'Infante'),
            'peso' => Yii::t('app', 'Peso (kg)'),
            'imc' => Yii::t('app', 'IMC'),
            'observacion_Auditoria' => Yii::t('app', 'Observaciones'),
            'archivo_Auditoria' => Yii::t('app', 'Código documento'),
            'edad' => Yii::t('app', 'Edad (meses)'),
            'checkedDadosAlta' => Yii::t('app', 'Ver Infantes Dados de Baja'),
            'nombreCompletoInfante' => Yii::t('app', 'Nombre Completo'),
        ));
    }

    /**
     * Busca los datos antropomorficos de los niños pertenecientes a una institucion
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $da_id id del dato antropomorfico
     * @return \DatosAntropomorficos
     */
    public function de_institucion($da_id = null) {
        $modelCruge = InstitucionCrugeUser::model()->de_usuario()->findAll();
        $this->getDbCriteria()->mergeWith(
                array(
                    'join' => 'LEFT JOIN ninios ni ON ni.id = t.ninios_id',
                    'condition' => 'ni.institucion_id=:institucion_id',
                    'params' => array(':institucion_id' => $modelCruge[0]['oldValues']['institucion_id'],
                    )
                )
        );
        if ($da_id != null) {
            $this->getDbCriteria()->mergeWith(
                    array(
                        'condition' => 't.id=:da_id',
                        'params' => array(':da_id' => $da_id,
                        )
                    )
            );
        }
        return $this;
    }

    /**
     * Genera un array para la tabla de datos
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param type $inicio //TODO: deprecated
     * @param type $idNinio
     * @return array
     */
    public function generarArrayDatos($inicio = null, $idNinio) {
        $data = array();
        $i = 0;
        $j = 0;
        for ($n = 0; $n < 61; $n++) {
            if ($i == 12) {
                $j++;
                $i = 0;
            }
            $edad = ($i == 0) ? $j . "<b>" . " año(s) " . "</b>" : $i;
            $consImc = $this->consulta($idNinio, null, null, "imc", $n);
            $consPeso = $this->consulta($idNinio, null, null, "peso", $n);
            $consTalla = $this->consulta($idNinio, null, null, "talla", $n);

            array_push($data, array($edad, $consImc, $consTalla, $consPeso));
            $i++;
        }
        return $data;
    }

    /**
     * Función que genera el reporte para IMC, peso o talla  del infante
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param date $inicio fecha de nacimiento //todo quitar variable
     * @param int $idNinio identificador del niño
     * @param String $tipo puede ser imc, talla o peso
     * @return array
     */
    public function generarReport($inicio = null, $idNinio, $tipo) {
        $report = array();
        $report['xAxis']['categories'] = array();
        $report['series'] = array();
        $data = array();
        $i = 0;
        $j = 0;

        for ($index = 0; $index < 61; $index++) {
            if ($i == 12) {
                $j++;
                $i = 0;
            }
            $categoria = ($i == 0) ? $j . "<b>" . " año(s) " . "</b>" : $i;
            $report['xAxis']['categories'][] = $categoria;
            switch ($tipo) {
                case "imc": $cons = $this->consulta($idNinio, null, null, "imc", $index);
                    break;
                case "talla": $cons = $this->consulta($idNinio, null, null, "talla", $index);
                    break;
                case "peso": $cons = $this->consulta($idNinio, null, null, "peso", $index);
                    break;

                default:
                    break;
            }
            if ($cons[0] != 0 || $cons[0] != null || !empty($cons[0])) {
                array_pop($report['xAxis']['categories']);
                $report['xAxis']['categories'][] = "<strong>  (" . $cons[0] . ") ----> </strong>" . $categoria;
            }
            array_push($data, $cons[0]);
            $i++;
        }
        array_push($report['xAxis']['categories'], '5<b> año(s) </b>');
        $ninio = Ninios::model()->findByPk((int) $idNinio);

        switch ($tipo) {
            case "imc": {
                    $curvaN3D = tablasOMS::getPosImcIndiceZ($ninio->genero, "-3DE");
                    $curvaN2D = tablasOMS::getPosImcIndiceZ($ninio->genero, "-2DE");
                    $curvaN1D = tablasOMS::getPosImcIndiceZ($ninio->genero, "-1DE");
                    $curvaMediana = tablasOMS::getPosImcIndiceZ($ninio->genero, "mediana");
                    $curva1D = tablasOMS::getPosImcIndiceZ($ninio->genero, "1DE");
                    $curva2D = tablasOMS::getPosImcIndiceZ($ninio->genero, "2DE");
                    $curva3D = tablasOMS::getPosImcIndiceZ($ninio->genero, "3DE");
                    $curvaMAXD = tablasOMS::getPosImcIndiceZ($ninio->genero, "MAXDE");
                    array_push($report['series'], array('name' => "IMC de" . Ninios::model()->findByPk((int) $idNinio), 'data' => $data, 'type' => 'line', 'color' => "#000000", "marker" => array("enabled" => true), 'zIndex' => 60));
                    array_push($report['series'], array('name' => "Sobrepeso", 'data' => $curvaMAXD, 'type' => 'area', 'color' => '#8DD62B')); //percentil3
                    array_push($report['series'], array('name' => "Riesgo sobrepeso", 'data' => $curva3D, 'type' => 'area', 'color' => '#8DD62B')); //percentil3
                    array_push($report['series'], array('name' => "Peso normal", 'data' => $curva2D, 'type' => 'area', 'color' => '#33FF33')); //percentil3
                    array_push($report['series'], array('name' => "Mediana", 'data' => $curvaMediana, 'type' => 'spline', 'color' => 'blue',)); //percentil3
                    array_push($report['series'], array('name' => "Riesgo Bajo peso", 'data' => $curvaN2D, 'type' => 'area', 'color' => 'pink',)); //percentil3
                    array_push($report['series'], array('name' => "Bajo peso", 'data' => $curvaN3D, 'type' => 'area', 'color' => '#FF6666',)); //percentil3
                }break;
            case "talla": {
                    $curvaN3D = tablasOMS::getPosTallaIndiceZ($ninio->genero, "-3DE");
                    $curvaN2D = tablasOMS::getPosTallaIndiceZ($ninio->genero, "-2DE");
                    $curvaN1D = tablasOMS::getPosTallaIndiceZ($ninio->genero, "-1DE");
                    $curvaMediana = tablasOMS::getPosTallaIndiceZ($ninio->genero, "mediana");
                    $curva1D = tablasOMS::getPosTallaIndiceZ($ninio->genero, "1DE");
                    $curva2D = tablasOMS::getPosTallaIndiceZ($ninio->genero, "2DE");
                    $curva3D = tablasOMS::getPosTallaIndiceZ($ninio->genero, "3DE");
                    $curvaMAXD = tablasOMS::getPosTallaIndiceZ($ninio->genero, "MAXDE");
                    array_push($report['series'], array('name' => "Talla de " . Ninios::model()->findByPk((int) $idNinio), 'data' => $data, 'type' => 'line', 'color' => "#000000", "marker" => array("enabled" => true), 'zIndex' => 60));
                    array_push($report['series'], array('name' => "Talla muy Alta", 'data' => $curvaMAXD, 'type' => 'area', 'color' => '#8DD62B')); //percentil3
                    array_push($report['series'], array('name' => "Talla Alta", 'data' => $curva3D, 'type' => 'area', 'color' => '#8DD62B')); //percentil3
                    array_push($report['series'], array('name' => "Talla Normal", 'data' => $curva2D, 'type' => 'area', 'color' => '#33FF33')); //percentil3
                    array_push($report['series'], array('name' => "Mediana", 'data' => $curvaMediana, 'type' => 'spline', 'color' => 'blue',)); //percentil3
                    array_push($report['series'], array('name' => "Talla Baja", 'data' => $curvaN2D, 'type' => 'area', 'color' => 'pink',)); //percentil3
                    array_push($report['series'], array('name' => "Baja Talla Severa", 'data' => $curvaN3D, 'type' => 'area', 'color' => '#FF6666',)); //percentil3
                }break;
            case "peso": {
                    $curvaN3D = tablasOMS::getPosPesoIndiceZ($ninio->genero, "-3DE");
                    $curvaN2D = tablasOMS::getPosPesoIndiceZ($ninio->genero, "-2DE");
                    $curvaN1D = tablasOMS::getPosPesoIndiceZ($ninio->genero, "-1DE");
                    $curvaMediana = tablasOMS::getPosPesoIndiceZ($ninio->genero, "mediana");
                    $curva1D = tablasOMS::getPosPesoIndiceZ($ninio->genero, "1DE");
                    $curva2D = tablasOMS::getPosPesoIndiceZ($ninio->genero, "2DE");
                    $curva3D = tablasOMS::getPosPesoIndiceZ($ninio->genero, "3DE");
                    $curvaMAXD = tablasOMS::getPosPesoIndiceZ($ninio->genero, "MAXDE");
                    array_push($report['series'], array('identificadorNombre' => "ok", 'name' => "Peso de " . Ninios::model()->findByPk((int) $idNinio), 'data' => $data, 'type' => 'line', 'color' => "#000000", "marker" => array("enabled" => true), 'zIndex' => 60));
                    array_push($report['series'], array('name' => "Peso Elevado Severo ", 'data' => $curvaMAXD, 'type' => 'area', 'color' => '#FF6666')); //percentil3
                    array_push($report['series'], array('name' => "Peso elevado", 'data' => $curva3D, 'type' => 'area', 'color' => '#FF9933')); //percentil3
                    array_push($report['series'], array('name' => "Peso Normal", 'data' => $curva2D, 'type' => 'area', 'color' => '#33FF33')); //percentil3
                    array_push($report['series'], array('name' => "Mediana", 'data' => $curvaMediana, 'type' => 'spline', 'color' => 'blue',)); //percentil3
                    array_push($report['series'], array('name' => "Bajo Peso", 'data' => $curvaN2D, 'type' => 'area', 'color' => 'pink',)); //percentil3
                    array_push($report['series'], array('name' => "Bajo Peso Severo", 'data' => $curvaN3D, 'type' => 'area', 'color' => '#FF6666',)); //percentil3
                }

            default:
                break;
        }
        return $report;
    }

    /**
     * Funcion para generar los reportes tipo pie para los indicadores infantiles
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param String $tipo
     * @param int $institucion_id
     * @return array
     */
    public function generarReportIndicadores($tipo, $institucion_id,$fechaMes) {
        $report = array();
        $report['series'] = array();
        $data = array();
        $auxdata = $this->consultaIndicadores($tipo, $institucion_id,$fechaMes);
        if (!empty($auxdata)) {
            foreach ($auxdata as $key => &$value) {
                array_push($data, array(Util::setFormatoInterpretacion($value[$tipo]), (int) $value['cantidad']));
            }
        }
        $report['series']['data'] = $data;
        
        $report['series']['type'] = 'pie';
        $report['series']['name'] = "Número de infantes";
        return $report;
    }

//    TODO hacer consulta para rangos de imc de acuerdo a la edad sprint 3
//    SELECT * FROM `datos_antropomorficos` WHERE `fecha` between '2014-10-01 00:00:00' and '2014-10-31 23:59:59' and `edad`= 22 and `peso`

    /**
     * Consulta para el dato especifico segun la variable (tipo) de un niño en un rango de fechas
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $idninio identificador del infante
     * @param date $inicio fecha de inicio de la busqueda
     * @param date $fin fecha de fin de la busqueda
     * @param String $tipo puede ser imc, peso, talla o all
     * @return array
     */
    public function consulta($idninio, $inicio = null, $fin = null, $tipo, $edad) {
        $data = array();
        $command = Yii::app()->db->createCommand();
        switch ($tipo) {
            case "imc": $command->select('da.imc  as imc');
                break;
            case "talla": $command->select('da.talla  as talla');
                break;
            case "peso": $command->select('da.peso  as peso');
                break;
            case "all": $command->select('da.imc  as imc,da.talla  as talla,da.peso  as peso');
                break;

            default:
                break;
        }
        $command->from('datos_antropomorficos da')
                ->leftJoin("ninios n", "da.ninios_id=n.id")
                ->where("n.id=:idNinio", array(":idNinio" => $idninio))
                ->andWhere("da.edad =:fin", array(":fin" => $edad))
                ->order("da.fecha DESC");
        $options = $command->queryAll();
        if (!empty($options)) {
            switch ($tipo) {
                case "imc":$data[] = (float) $options[0]['imc'];
                    break;
                case "talla":$data[] = (float) $options[0]['talla'];
                    break;
                case "peso":$data[] = (float) $options[0]['peso'];
                    break;
                default:
                    break;
            }
        } else {
            $data[] = null;
        }
        return $data;
    }

    /**
     * Consulta sql que devuelve la cantidad de infantes deacuerdo a la interpretacion de peso y talla
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param String $tipoIndicado puede ser interpretacion_peso o interpretacion_talla
     * @param int $institucion_id id de la insitucion
     * @param String $fechaMes fecha describe año y mes
     * @return array
     */
//    SELECT count(*) as cantidad, da.interpretacion_peso  as interpretacion_peso
//FROM  ninios ni left join `institucion_cruge_user` icu  on ni.institucion_id = icu.institucion_id left join `datos_antropomorficos` 
//da on ni.id = da.ninios_id
//where da.fecha BETWEEN DATE_FORMAT(now(), '%Y-%m-01 00:00:00' ) AND now() AND 
//ni.institucion_id=$institucion_id group by da.interpretacion_peso
    public function consultaIndicadores($tipoIndicado, $institucion_id = null,$fechaMes) {
        $options = array();
        $command = Yii::app()->db->createCommand()
                ->from("ninios ni");
        switch ($tipoIndicado) {
            case "interpretacion_peso": $command->select('count(*) as cantidad,da.interpretacion_peso  as interpretacion_peso');
                break;
            case "interpretacion_talla": $command->select('count(*) as cantidad,da.interpretacion_talla  as interpretacion_talla');
                break;
            default:
                break;
        }
        $command->leftJoin('institucion_cruge_user icu', 'ni.institucion_id = icu.institucion_id');
        $command->leftJoin('datos_antropomorficos da', 'ni.id = da.ninios_id');
        $command->where("da.fecha BETWEEN '".$fechaMes."-01 00:00:00'  AND DATE_FORMAT(LAST_DAY('".$fechaMes."-01'),'%Y-%m-%d 23:59:59') AND ni.institucion_id=:institucion_id", array(':institucion_id' => $institucion_id));
        $command->andWhere("ni.fecha_salida IS NULL ");
//        $command->where("da.fecha BETWEEN DATE_FORMAT(now(), '%Y-%m-01 00:00:00' ) AND now() AND ni.institucion_id=:institucion_id", array(':institucion_id' => $institucion_id));
        switch ($tipoIndicado) {
            case "interpretacion_peso": $command->group('da.interpretacion_peso');
                break;
            case "interpretacion_talla": $command->group('da.interpretacion_talla');
                break;
        }
        
        $options = $command->queryAll();
        if (!empty($options)) {
            $data = $options;
        } else {
            $data = null;
        }
//        var_dump($data);
//        die();
        return $data;
    }

    /**
     * Valida si se ha ingresado una vez al mes un IMC de un niño
     * @autor Mauricio Chamorro <mrchamorro@hotmail.com>
     * @param id $idninio
     * @return array
     */
    public function reportarIngresoImcMensual($idninio, $fecha = null) {
        if ($fecha != null) {
            $ini = $fecha;
        } else {
            $ini = Util::FechaActual();
            $ini = substr($ini, 0, 10);
        }

        $date = DateTime::createFromFormat('Y-m-d', $ini)->setTime(0, 0, 0);
        $date->modify('first day of this month');
        $inicio = $date->format('Y-m-d H:i:s');
        $date->modify('last day of this month');
        $date->add(new DateInterval('PT23H59M59S'));
        $fin = $date->format('Y-m-d H:i:s');
        $dato = $this->consultaPorFecha($idninio, $inicio, $fin, "imc");
        return $dato;
    }

    /**
     * Valida si el dato antropometrico de un id en especifico es actualizable 
     * si la fecha actual esta entre el mes de la actualizacion de la fecha del
     *  dato antropometrico
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $id identificador de la tabla datos_antropomorficos
     * @return boolean true si es actualizable, false si no lo es
     */
    public function validarActualizacionDatoAntropometrico($id, $actionType, $idDatoAntro) {
        $fechaMesActual = Util::FechaActual();
        $fechaMesActual = substr($fechaMesActual, 0, 10);
        $dateI = DateTime::createFromFormat('Y-m-d', $fechaMesActual)->setTime(0, 0, 0);
        $dateIn = $dateI->modify('first day of this month');
        $dateIni = $dateIn->format('Y-m-d H:i:s');
        $dateF = DateTime::createFromFormat('Y-m-d', $fechaMesActual)->setTime(0, 0, 0);
        $dateFi = $dateF->modify('last day of this month');
        $dateFin = $dateFi->format('Y-m-d H:i:s');

        $options;
        if ($idDatoAntro != '') {
            $command = Yii::app()->db->createCommand();
            $command->select('*')
                    ->from('datos_antropomorficos da')
                    ->where("da.id=:id", array(":id" => $idDatoAntro))
                    ->andWhere("da.fecha between :inicio and now()", array(":inicio" => $dateIni));
            $options = $command->queryAll();
        } else {
            $datoAntro = DatosAntropomorficos::model()->findAll(array("condition" => "ninios_id = :idNinio", "params" => array(":idNinio" => (int) $id), "order" => "fecha DESC"));
            if (isset($datoAntro[0])) {
                $command = Yii::app()->db->createCommand();
                $command->select('*')
                        ->from('datos_antropomorficos da')
                        ->where("da.id=:id", array(":id" => $datoAntro[0]['oldValues']['id']))
                        ->andWhere("da.fecha between :inicio and now()", array(":inicio" => $dateIni));
                $options = $command->queryAll();
            }
        }

        if (!empty($options)) { //update 
            if ($actionType == "update") {
                return true;
            }
            if ($actionType == "createUnique") {
                return false;
            }
        } else {
            if ($actionType == "createUnique") {
                return true;
            }
            if ($actionType == "update") {
                return false;
            }
        }
    }

    /**
     * Consulta para el dato especifico segun la variable (tipo) de un niño en un rango de fechas
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param date $inicio fecha de inicio de la busqueda
     * @param date $fin fecha de fin de la busqueda
     * @param String $tipo puede ser imc, peso, talla o all
     * @return array
     */
    public function consultaPorFecha($idninio, $inicio, $fin, $tipo) {
        $data = array();
        $command = Yii::app()->db->createCommand();
        switch ($tipo) {
            case "imc": $command->select('da.imc  as imc');
                break;
            case "talla": $command->select('da.talla  as talla');
                break;
            case "peso": $command->select('da.peso  as peso');
                break;
            case "all": $command->select('da.imc  as imc,da.talla  as talla,da.peso  as peso');
                break;

            default:
                break;
        }
        $command->from('datos_antropomorficos da')
                ->leftJoin("ninios n", "da.ninios_id=n.id")
                ->where("n.id=:idNinio", array(":idNinio" => $idninio))
                ->andWhere("da.fecha between :inicio and :fin", array(":inicio" => $inicio, ":fin" => $fin))
                ->order("da.fecha DESC");
        $options = $command->queryAll();
        if (!empty($options)) {
            switch ($tipo) {
                case "imc":$data[] = (float) $options[0]['imc'];
                    break;
                case "talla":$data[] = (float) $options[0]['talla'];
                    break;
                case "peso":$data[] = (float) $options[0]['peso'];
                    break;
                default:
                    break;
            }
        } else {
            $data[] = null;
        }
        return $data;
    }

    /**
     * Busca si la tabla del modelo no esta vacia
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @return query
     */
    public function contarDatos() {
        $command = Yii::app()->db->createCommand()
                ->select("count(id) as total")
                ->from($this->tableName());
        $result = $command->queryAll();
        return $result[0]['total'];
    }

    public function search() {
        $criteria = new CDbCriteria;
        $criteria->join .= 'inner join ninios on ninios.id = t.ninios_id ';
        $criteria->join .= 'inner join institucion on institucion.id = ninios.institucion_id ';
        $criteria->compare('id', $this->id);
        $criteria->compare('ninios_id', $this->ninios_id);
        $criteria->compare('fecha', $this->fecha, true);
        $criteria->compare('CONCAT(IFNULL(CONCAT(ninios.nombres," "),""),IFNULL(ninios.apellidos,""))', $this->nombreCompletoInfante, true, 'or');
        $criteria->compare('edad', $this->edad, true);
        $criteria->compare('talla', $this->talla, true);
        $criteria->compare('peso', $this->peso, true);
        $criteria->compare('imc', $this->imc, true);
        $criteria->compare('institucion.id', $this->institucion, false);
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'sort' => array('defaultOrder' => 'fecha DESC')
        ));
    }

    /**
     * Criteria para buscar infantes que no estan dados de baja
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec> 
     * @return \DatosAntropomorficos
     */
    public function sin_FechaSalida() {
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 'ninios.fecha_salida IS NULL',
                )
        );
        return $this;
    }

    /**
     * Criteria para buscar infantes que ya han sido dados de baja
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec> 
     * @return \DatosAntropomorficos
     */
    public function con_FechaSalida() {
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 'ninios.fecha_salida IS NOT NULL',
                )
        );
        return $this;
    }

    public function scopes() {
        return array(
            'limitcincuenta' => array(
                'limit' => 50,
            ),
            'conFechaSalida' => array(
                'condition' => 'ninios.fecha_salida  IS NOT NULL',
            ),
            'sinFechaSalida' => array(
                'condition' => 'ninios.fecha_salida  IS NULL',
            ),
        );
    }

    public function behaviors() {
        return array(
            'ActiveRecordLogableBehavior' => array('class' =>
                'application.behaviors.DatosAntropometricosActiveRecordLogableBehavior'),
        );
    }

}
